// let bol: boolean = false
// let bol:boolean = new Boolean(1)
// let bol: Boolean = new Boolean(0)
// let bol:boolean = Boolean(1)
// boolean 代表 原始数据类型布尔值
// Boolean 代表 new Boolean() 返回的布尔对象
// Boolean(1) 返回值也是原始数据类型布尔值
// let decLiteral: number = 6
// //  十六进制表示法
// let hexLiteral: number = 0xf00d
// // 二进制表示法
// let binaryLiteral: number = 0b1010
// // 八进制表示法
// let octalLiteral: number = 0o744
// let notANumber: number = NaN
// let infinityNumber: number = Infinity
// let myName: string = 'Tom';
// let myAge: number = 25;
// // 模板字符串
// let sentence: string = `Hello, my name is ${myName}.
// I'll be ${myAge + 1} years old next month.`;
// function fn(): void {
//   console.log(123)
//   return 123
// }
// let xx: void = undefined
// let xxx: string = void
// let yyy
// yyy = 123
// yyy.filter()
// yyy = ''
// let myFavoriteNumber: string | number
// // myFavoriteNumber = 7
// myFavoriteNumber = '123'
// myFavoriteNumber.trim()
// function getLength(something: string | number): number {
//   return something.length
// }
// function getString(something: string | number): string {
//     return something.toString();
// }
// interface Iperson {
//   readonly id: number
//   name: string
//   age?: number
//   [xxx: string]: string | number //任意属性
// }
// let zs: Iperson = {
//   //   id: 1,
//   name: '123',
//   age: 123,
//   uuu: '123',
//   zzz: NaN,
// }
// zs.id = 2
// let arr: number[] = [1, 2, 3]
// let arr: Array<number> = [1, 2, 3, '5']
// arr.push(false)
// interface Iarr {
//   [index: number]: string
// }
// let arr:Iarr = ['1']
// function sum() {
//   let args: IArguments = arguments
// }
// interface Args {
//   [index: number]: any
//   length: number
//   callee: Function
// }
// function sum() {
//   let args: Args = arguments
// }
// 需求: 要定义一个数组的类型, 这个数组中存储的都是对象
// interface obj {
//   name: string
//   age: number
// }
// let arr: obj[] = [
//   { name: 'zs', age: 18 },
//   { name: 'zs', age: 18 },
// ]
// function sum(x: number, y: number): number {
//   return x + y
// }
// sum(1)
// (x: number, y: number) => number
// let mySum: (x: number, y: number) => number
// mySum = function (x: number, y: number): number {
//   return x + y
// }
// let mySum: (x: number, y: number) => number = function (
//   x: number,
//   y: number
// ): number {
//   return x + y
// }
// interface Ifn {
//   (x: number, y: number): number
// }
// let mySum: Ifn = function (x: number, y: number): number {
//   return x + y
// }
// function buildName(firstName?: string, lastName?: string): string {
//   if (lastName) {
//     return firstName + ' ' + lastName
//   } else {
//     return firstName
//   }
// }
// let tomcat = buildName('Tom', 'Cat')
// let tom = buildName('Tom')
// function buildName(firstName: string = 'Cat', lastName: string) {
//   return firstName + ' ' + lastName
// }
// let tomcat = buildName('Tom', 'Cat')
// let tom = buildName(undefined, 'Tom')
// function fn(x: number, y: number, ...args: any[]) {
//   console.log(args)
// }
// fn(1, 2, 3, 4, '5', 6)
// function reverse(x: number): number
// function reverse(x: string): string
// function reverse(x: number | string): number | string | void {
//   if (typeof x === 'number') {
//     return Number(x.toString().split('').reverse().join(''))
//   } else if (typeof x === 'string') {
//     return x.split('').reverse().join('')
//   }
// }
// console.log(reverse(123.123).toFixed())
// reverse('123').
// interface Cat {
//   name: string
//   run(): void
// }
// interface Fish {
//   name: string
//   swim(): void
// }
// function isFish(animal: Cat | Fish) {
//   if (typeof (animal as Fish).swim === 'function') {
//     return true
//   }
//   return false
// }
// class ApiError extends Error {
//   code: number = 0
// }
// class HttpError extends Error {
//   statusCode: number = 200
// }
// function isApiError(error: Error) {
//   if (typeof (error as ApiError).code === 'number') {
//     return true
//   }
//   return false
// }
// interface ApiError extends Error {
//   code: number;
// }
// interface HttpError extends Error {
//   statusCode: number;
// }
// function isApiError(error: Error) {
//   if (typeof (error as ApiError).code === 'number') {
//       return true;
//   }
//   return false;
// }
// (window as any).foo = 1
// function getCacheData(key: string): any {
//   return (window as any).cache[key]
// }
// interface Cat {
//   name: string
//   run(): void
// }
// const tom = getCacheData('tom') as Cat
// tom.run()
// type Name = string
// type NameResolver = () => string
// type NameOrResolver = Name | NameResolver
// function getName(n: NameOrResolver): Name {
//   if (typeof n === 'string') {
//     return n
//   } else {
//     return n()
//   }
// }
// type EventNames = 'click' | 'scroll' | 'mousemove'
// type xxx = 0 | 1
// function handleEvent(ele: Element, event: EventNames, num: xxx) {
//   // do something
// }
// handleEvent(document.getElementById('hello'), 'scroll', 0) // 没问题
// handleEvent(document.getElementById('world'), 'mousemove', 2) // 报错，event 不能为 'dblclick'
function createArray(length, value) {
    var result = T[];
    for (var i = 0; i < length; i++) {
        result[i] = value;
    }
    return result;
}
// const arr = createArray(3, 'x') // ['x', 'x', 'x']
// const arr1 = createArray(3, 10) // [10, 10, 10]
// arr[0].toFixed()
